package br.com.bestOffer.ejb.anuncio.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

import br.com.bestOffer.enumerator.StatusAnuncio;

@Entity
@Table(name="TB03_ANUNCIO")
@NamedQueries({
	@NamedQuery(name="Anuncio.listarAnunciosPorUsuario", query="SELECT a FROM Anuncio a where a.id.usuario.id = :idUsuario"),
	@NamedQuery(name="Anuncio.listarAnunciosPorProduto", query="SELECT a FROM Anuncio a where a.id.produto.id = :idProduto and a.status = 1 order by a.preco"),
	@NamedQuery(name="Anuncio.listarAnunciosPorCategoriaProduto", query="SELECT a FROM Anuncio a WHERE a.id.produto.categoriaProduto = :categoria and a.status = 1 order by a.preco"),
	@NamedQuery(name="Anuncio.listaBairrosAnuncios", query="SELECT DISTINCT anuncio.id.usuario.bairro FROM Anuncio anuncio WHERE anuncio.id.produto.categoriaProduto = :categoria and anuncio.status = 1"),
	@NamedQuery(name="Anuncio.listarAnunciantePorCategoria", query="SELECT DISTINCT NEW br.com.bestOffer.ejb.usuario.entity.Usuario(anuncio.id.usuario) FROM Anuncio anuncio WHERE anuncio.id.produto.categoriaProduto = :categoria and anuncio.status = 1"),
	@NamedQuery(name="Anuncio.listaBairrosPorProduto", query="	SELECT DISTINCT anuncio.id.usuario.bairro FROM Anuncio anuncio WHERE anuncio.id.produto.id = :idProduto and anuncio.status = 1"),
	@NamedQuery(name="Anuncio.listarAnunciantesPorProduto", query="SELECT DISTINCT NEW br.com.bestOffer.ejb.usuario.entity.Usuario(anuncio.id.usuario) FROM Anuncio anuncio WHERE anuncio.id.produto.id = :idProduto and anuncio.status = 1"),
	@NamedQuery(name="Anuncio.listarAnunciantesPorBairro", query="SELECT DISTINCT NEW br.com.bestOffer.ejb.usuario.entity.Usuario(anuncio.id.usuario) FROM Anuncio anuncio WHERE anuncio.id.usuario.bairro = :bairro and anuncio.id.produto.categoriaProduto = :categoria and anuncio.status = 1"),
	@NamedQuery(name="Anuncio.listarAnuncios", query="SELECT a FROM Anuncio a ORDER BY a.dataCriacao DESC"),
	@NamedQuery(name="Anuncio.listarQuantidadeAnunciosProduto", query="Select count(a) from Anuncio a where a.id.produto.categoriaProduto = :categoria and a.status = 1")

	
})
public class Anuncio implements Serializable{

	private static final long serialVersionUID = 1345426527954468024L;

	@EmbeddedId
	private AnuncioPK id;
	
	@Column(name="data_criacao")
	private Date dataCriacao;
	
	@Column(name="status",nullable=false)
	@Enumerated
	private StatusAnuncio status;
	
	@Column(name="preco",nullable=false)
	private Double preco;
	
	@Column(name="informacoes_adicionais",nullable=false,length=200)
	private String informacoesAdicionais;


	public AnuncioPK getId() {
		return id;
	}


	public void setId(AnuncioPK id) {
		this.id = id;
	}


	public Date getDataCriacao() {
		return dataCriacao;
	}


	public void setDataCriacao(Date dataCriacao) {
		this.dataCriacao = dataCriacao;
	}


	public StatusAnuncio getStatus() {
		return status;
	}


	public void setStatus(StatusAnuncio status) {
		this.status = status;
	}


	public Double getPreco() {
		return preco;
	}


	public void setPreco(Double preco) {
		this.preco = preco;
	}

	public String getInformacoesAdicionais() {
		return informacoesAdicionais;
	}


	public void setInformacoesAdicionais(String informacoesAdicionais) {
		this.informacoesAdicionais = informacoesAdicionais;
	}

	
	
	
}
